#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int N=510;
struct node{
	int x,y,w;
	bool operator<(const node& p) const{
		return w<p.w;
	}
};
int f[N];
int a,b;
vector<node> v;
int Find(int x)
{
	if(f[x]!=x)
	{
		f[x]=Find(f[x]);
	}
	return f[x];
}
int kluacal()
{
	int ret=0;
	for(int i=0;i<v.size();i++)
	{
		node t=v[i];
		if(Find(t.x)!=Find(t.y))
		{
			ret+=t.w;
			f[Find(t.x)]=Find(t.y);
		}
	}
	return ret;
	
}
int main()
{
	
	
	cin>>a>>b;

	for(int i=1;i<=b;i++)	
		v.push_back({0,i,a});
	for(int i=1;i<=b;i++)
	{
		for(int j=1;j<=b;j++)
		{
			int t;
			cin>>t;
			if(t!=0)
				v.push_back({i,j,t});
		}		
	}
	for(int i=0;i<=b;i++)
		f[i]=i;
	sort(v.begin(),v.end());
	cout<<kluacal();
	
	return 0;
}
